package com.ht.api.call.func.impl.sop;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ht.api.bean.AjaxResult;
import com.ht.api.bean.LoginBean;
import com.ht.api.call.func.IFunctionCall;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.exception.HtException;
import com.ht.api.db.task.HtTaskExecutor;
import com.ht.api.db.util.HtUtil;
import com.ht.api.service.SopService;
import com.ht.api.task.SopInitTask;
import com.ht.api.task.TagInitTask;
import lombok.extern.slf4j.Slf4j;

/**
 * 初始化旅程用户函数
 * @author asq
 * @createTime 2025年3月20日 10:05:40
 */
@Slf4j
public class SopInitUserFunctionCall implements IFunctionCall {

	@Override
	public String getName() {
		return "初始化旅程用户函数";
	}

	@Override
	public JSONObject execute(LoginBean me, JSONObject param, AjaxResult result) {
		// 获取登陆用户的数据源
		String sopId = param.getStr("main_id");

		Long stageCount = Db.createSqlParser("stage").where("sop_id", sopId).count(me.getDataSource());

		if (stageCount == null || stageCount == 0) {
			throw new HtException("没有创建旅程阶段，不可进行旅程初始化！");
		}

		Entity sop = Entity.create("sop");
		sop.setMainId(sopId);
		sop.set("init_status", 1);
		Db.insert(me.getDataSource(), sop);

		HtUtil.createLog(me.getDataSource(), sopId, "开启初始化！");

		JSONObject taskParam = JSONUtil.createObj();
		taskParam.set("tenant_id", me.getTenantId());
		taskParam.set("sop_id", sopId);
		HtTaskExecutor.submitTask(taskParam, new SopInitTask());

		// 返回客户端信息：已开启标签初始化，请稍后查看.
		return JSONUtil.createObj().set("info", "已开启旅程初始化，请稍后查看.");
	}
}
